Wayland: fix a crash in opaque region handling
authorMatthias Clasen <mclasen@redhat.com>
Tue, 15 Oct 2013 22:19:22 +0000 (18:19 -0400)
committerMatthias Clasen <mclasen@redhat.com>
Tue, 15 Oct 2013 22:21:44 +0000 (18:21 -0400)
We may get a NULL region passed to the backend, which means
'nothing is opaque'. In that case, don't crash, but pass
the information on to the compositor.

http://bugzilla.gnome.org/show_bug.cgi?id=709854

gdk/wayland/gdkwindow-wayland.c

index d0aac9083e790b0ad82d9248908f199877b46223..b5e9036ce754391330d27f9f4b25175a78fa8c20 100644 (file)
@@ -2070,7 +2070,7 @@ gdk_wayland_window_set_opaque_region (GdkWindow      *window,
                                       cairo_region_t *region)
 {
   GdkWindowImplWayland *impl = GDK_WINDOW_IMPL_WAYLAND (window->impl);
-  struct wl_region *wl_region;
+  struct wl_region *wl_region = NULL;
 
   if (GDK_WINDOW_DESTROYED (window))
     return;
@@ -2078,12 +2078,13 @@ gdk_wayland_window_set_opaque_region (GdkWindow      *window,
   if (!impl->surface)
     gdk_wayland_window_create_surface (window);
 
-  wl_region = wl_region_from_cairo_region (GDK_WAYLAND_DISPLAY (gdk_window_get_display (window)), region);
-  if (wl_region == NULL)
-    return;
+  if (region != NULL)
+    wl_region = wl_region_from_cairo_region (GDK_WAYLAND_DISPLAY (gdk_window_get_display (window)), region);
 
   wl_surface_set_opaque_region (impl->surface, wl_region);
-  wl_region_destroy (wl_region);
+
+  if (wl_region != NULL)
+    wl_region_destroy (wl_region);
 }